package com.gsdx.klzn.utils; // 包名

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Generator { // 定义 generator 类
    public static void main(String[] args) { // 主方法
        // 创建一个列表以存储需要生成代码的数据库表名
        List<String> tables = new ArrayList<>();
        tables.add(""); // 添加用户表

        // 创建快速自动生成器，并指定数据库连接信息
        FastAutoGenerator.create("jdbc:mysql://", "root", "")
                .globalConfig(builder -> { // 配置全局信息
                    builder.author("AC") // 设置作者
                            .outputDir(System.getProperty("user.dir") + "\\src\\main\\java") // 设置输出路径为项目的 Java 目录
                            .enableSwagger() // 开启 Swagger 支持
                            .commentDate("yyyy-MM-dd") // 设置注释中的日期格式
                            .fileOverride(); // 开启覆盖之前生成的文件
                })
                .packageConfig(builder -> { // 配置包信息
                    builder.parent("") // 设置父包名
                            .moduleName("") // 设置模块名
                            .entity("") // 设置实体类包名
                            .service("") // 设置服务接口包名
                            .serviceImpl("") // 设置服务实现类包名
                            .controller("") // 设置控制器包名
                            .mapper("mapper") // 设置 Mapper 接口包名
                            .xml("mapper") // 设置 XML 文件包名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper")); // 设置 XML 输出路径
                })
                .strategyConfig(builder -> { // 配置策略
                    builder.addInclude(tables) // 添加需要生成代码的表
                            .addTablePrefix("t_") // 设置表前缀，用于过滤
                            .serviceBuilder() // 服务相关配置
                            .formatServiceFileName("%sService") // 设置服务文件名称格式
                            .formatServiceImplFileName("%sServiceImpl") // 设置服务实现文件名称格式
                            .entityBuilder() // 实体类相关配置
                            .enableLombok() // 开启 Lombok 注解支持
                            .logicDeleteColumnName("deleted") // 设置逻辑删除字段名
                            .enableTableFieldAnnotation() // 启用表字段注解
                            .controllerBuilder() // 控制器相关配置
                            .enableHyphenStyle() // 开启 URL 映射使用连字符格式
                            .formatFileName("%sController") // 设置控制器文件名称格式
                            .enableRestStyle() // 开启 REST 风格接口
                            .mapperBuilder() // Mapper 相关配置
                            .enableBaseResultMap() // 生成通用的 resultMap
                            .superClass(BaseMapper.class) // 指定 Mapper 的父类
                            .formatMapperFileName("%sMapper") // 设置 Mapper 文件名称格式
                            .enableMapperAnnotation() // 启用 Mapper 注解方式
                            .formatXmlFileName("%sMapper"); // 设置 XML 文件名称格式
                })
                .execute(); // 执行生成
    }
}
